package com.abc.util;

import cn.hutool.core.util.ObjectUtil;
import com.abc.config.PromptConfig;
import com.abc.enums.PromptType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 提示词工具类
 * 提供提示词获取和格式化功能
 * 
 * @author abc
 * @since 2024-01-01
 */
@Slf4j
@Component
public class PromptUtil {

    @Autowired
    private PromptConfig promptConfig;

    /**
     * 获取标题生成的系统提示词
     */
    public String getTitleSystemPrompt() {
        return promptConfig.getTitle().getSystemPrompt();
    }

    /**
     * 获取标题生成的用户提示词
     */
    public String getTitleUserPrompt(String userMessage) {
        String template = promptConfig.getTitle().getUserPromptTemplate();
        return String.format(template, userMessage);
    }

    /**
     * 获取聊天的系统提示词
     */
    public String getChatSystemPrompt() {
        return promptConfig.getChat().getSystemPrompt();
    }

    /**
     * 获取聊天的用户提示词
     */
    public String getChatUserPrompt(String userMessage) {
        String template = promptConfig.getChat().getUserPromptTemplate();
        return String.format(template, userMessage);
    }

    /**
     * 获取总结的系统提示词
     */
    public String getSummarySystemPrompt() {
        return promptConfig.getSummary().getSystemPrompt();
    }

    /**
     * 获取总结的用户提示词
     */
    public String getSummaryUserPrompt(String content) {
        String template = promptConfig.getSummary().getUserPromptTemplate();
        return String.format(template, content);
    }

    /**
     * 获取翻译的系统提示词
     */
    public String getTranslationSystemPrompt() {
        return promptConfig.getTranslation().getSystemPrompt();
    }

    /**
     * 获取翻译的用户提示词
     */
    public String getTranslationUserPrompt(String content, String targetLanguage) {
        String template = promptConfig.getTranslation().getUserPromptTemplate();
        return String.format(template, content, targetLanguage);
    }

    /**
     * 通用方法：根据类型获取系统提示词
     */
    public String getSystemPrompt(PromptType type) {
        if (ObjectUtil.isEmpty(type)) {
            return "";
        }
        
        return switch (type) {
            case TITLE -> getTitleSystemPrompt();
            case CHAT -> getChatSystemPrompt();
            case SUMMARY -> getSummarySystemPrompt();
            case TRANSLATION -> getTranslationSystemPrompt();
        };
    }

    /**
     * 通用方法：根据类型代码获取系统提示词
     */
    public String getSystemPrompt(String typeCode) {
        PromptType type = PromptType.fromCode(typeCode);
        if (ObjectUtil.isEmpty(type)) {
            return "";
        }
        return getSystemPrompt(type);
    }

    /**
     * 通用方法：根据类型获取用户提示词
     */
    public String getUserPrompt(PromptType type, String... params) {
        if (ObjectUtil.isEmpty(type)) {
            return "";
        }
        return switch (type) {
            case TITLE -> getTitleUserPrompt(params[0]);
            case CHAT -> getChatUserPrompt(params[0]);
            case SUMMARY -> getSummaryUserPrompt(params[0]);
            case TRANSLATION -> getTranslationUserPrompt(params[0], params[1]);
        };
    }

    /**
     * 通用方法：根据类型代码获取用户提示词
     */
    public String getUserPrompt(String typeCode, String... params) {
        PromptType type = PromptType.fromCode(typeCode);
        if (ObjectUtil.isEmpty(type)) {
            return "";
        }
        return getUserPrompt(type, params);
    }

}
